package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.lib.*;
import br.com.telescope.auth.AdsrtSession;
import br.com.telescope.t2.AccessPolicy;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.CustomFeature;
import solutions.ferpa.ztest.ent.*;

/**
 * Logout do sistema.
 * <p>
 * Remove a identificação do usuário na sessão corrente.
 * <P>
 * 
 * <P>
 * Telescope origin: RTAUTH.PRO_LOGOUT
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class ProLogout extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTAUTH.PRO_LOGOUT";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Logout do sistema");
    }
    
    
    // Record items
    
    // Query items
    
    @Override
    public void initAttributes() {
        
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="LOG_OFF">
    public class FLogOff extends CustomFeature {
        
        @Override
        public void initForm() {
        }
        
        @Override
        public int getAccessPolicy() {
            return AccessPolicy.PUBLIC;
        }
        
        @Override
        public void preDisplay() {
            try {
                executarLogout();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("LOG_OFF");
            setTitle("Logout do sistema");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FLogOff());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "LOG_OFF";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    // </editor-fold>
    
    /**
     * Executar logout.
     */
    private void executarLogout() throws AdsException {
        // <user-code id="778186" parentId="752826" hashcode="a3168f7" length="738">
        // import br.com.telescope.auth.AdsrtSession;
        
        AdsrtSession session = (AdsrtSession) ctx.getSession();
        // Zera o menu (vai reconstruir só com acessos públicos)
        session.setObject("MENU", null);
        
        // Verifica se existe um bilhete de entrada válido
        String bilhete = ctx.getCookieValue(session.getCookieName());
        try {
            EntBilhetesEntrada bil = new EntBilhetesEntrada(ctx);
            bil.findByCodigo(bilhete);
            bil.del();
        } catch (Exception e) {
            // Não encontrou - Ignora!
        }
        // Remove o bilhete de entrada
        ctx.delCookie(bilhete);
        
        // Apaga informações do usuário
        session.logout();
        
        // Navega para interface de
        String goodBye = ctx.getPreference("RT.AUTH.LOGON_SERVICE", "RTAUTH.PRO_LOGIN");
        openInterface(goodBye);
        
        // </user-code>
    }
}
